1 using ProceduralToolkit.Examples.UI;
2 using
UnityEngine;
3
4 namespace
ProceduralToolkit.Examples
5 {
6     
public class BuildingGeneratorConfigurator : ConfiguratorBase
7     {
8         
public MeshFilter buildingMeshFilter;
9         
public MeshFilter platformMeshFilter;
10         
public RectTransform leftPanel;
11         
public bool constantSeed = false;
12         
public BuildingGenerator.Config config = new BuildingGenerator.Config();
13
14         
private const int minWidth = 10;
15         
private const int maxWidth = 30;
16         
private const int minLength = 10;
17         
private const int maxLength = 60;
18         
private const int minFloorCount = 1;
19         
private const int maxFloorCount = 10;
20
21         
private const float platformHeight = 0.5f;
22         
private const float platformRadiusOffset = 2;
23
24         
private BuildingGenerator generator;
25         
private Mesh buildingMesh;
26         
private Mesh platformMesh;
27
28         
private void Awake()
29         {
30             Generate();
31             SetupSkyboxAndPalette();
32
33             InstantiateControl<SliderControl>(leftPanel)
34                 .Initialize(
"Width", minWidth, maxWidth, (int) config.width, value =>
35                 {
36                     config.width =
value;
37                     Generate();
38                 });
39
40             InstantiateControl<SliderControl>(leftPanel)
41                 .Initialize(
"Length", minLength, maxLength, (int) config.length, value =>
42                 {
43                     config.length =
value;
44                     Generate();
45                 });
46
47             InstantiateControl<SliderControl>(leftPanel)
48                 .Initialize(
"Floors", minFloorCount, maxFloorCount, config.floors, value =>
49                 {
50                     config.floors =
value;
51                     Generate();
52                 });
53
54             InstantiateControl<ToggleControl>(leftPanel).Initialize(
"Has attic", config.hasAttic, value =>
55             {
56                 config.hasAttic =
value;
57                 Generate();
58             });
59
60             InstantiateControl<ButtonControl>(leftPanel).Initialize(
"Generate", () => Generate());
61         }
62
63         
private void Update()
64         {
65             UpdateSkybox();
66         }
67
68         
public void Generate(bool randomizeConfig = true)
69         {
70             
if (constantSeed)
71             {
72                 Random.InitState(
0);
73             }
74
75             
if (randomizeConfig)
76             {
77                 GeneratePalette();
78
79                 config.palette.wallColor = GetMainColorHSV().ToColor();
80
81                 config.roofConfig.type = RandomE.GetRandom(RoofType.Flat, RoofType.Hipped, RoofType.Gabled);
82             }
83
84             
if (generator == null)
85             {
86                 generator =
new BuildingGenerator();
87             }
88
89             
var buildingDraft = generator.Generate(config);
90             AssignDraftToMeshFilter(buildingDraft, buildingMeshFilter,
ref buildingMesh);
91
92             
float buildingRadius = Mathf.Sqrt(config.length/2*config.length/2 + config.width/2*config.width/2);
93             
float platformRadius = buildingRadius + platformRadiusOffset;
94
95             
var platformDraft = Platform(platformRadius, platformHeight);
96             AssignDraftToMeshFilter(platformDraft, platformMeshFilter,
ref platformMesh);
97         }
98     }
99 }


Gõ tìm kiếm nhanh...